内核报错kernel:NMI watchdog: BUG: soft lockup

您所在的位置:网站首页 watchdog bug soft lockup cpu 内核报错kernel:NMI watchdog: BUG: soft lockup

内核报错kernel:NMI watchdog: BUG: soft lockup

#内核报错kernel:NMI watchdog: BUG: soft lockup| 来源: 网络整理| 查看: 265

内核报错kernel:NMI watchdog: BUG: soft lockup - CPU#1 原创

heardic 2021-10-08 13:37:51 博主文章分类:linux系统 ©著作权

文章标签 服务器 linux 重启 死锁 看门狗 文章分类 其它 其它

©著作权归作者所有:来自51CTO博客作者heardic的原创作品,请联系作者获取转载授权,否则将追究法律责任 1.现象描述

系统管理员电话通知,描述为一台服务器突然无法ssh连接,登录服务器带外IP地址并进入远程控制台界面后,提示Authentication error,重启后即可正常进入系统,进入后过20分钟又进入死循环

2.排查原因

登录系统后无任何操作报错如下:

内核报错kernel:NMI watchdog: BUG: soft lockup - CPU#1_看门狗

询问了度娘,发现此报错为内核锁死,简称“死机”,询问管理员后得知,近期服务器安装了docker,可能由于负载过高导致

Soft lockup:这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。内核参数kernel.watchdog_thresh(/proc/sys/kernel/watchdog_thresh)系统默认值为10。如果超过2*10秒会打印信息,注意:调整值时参数不能大于60Linux内核对于每一个cpu都有一个监控进程,在技术界这个叫做watchdog(看门狗)。通过ps –ef | grep watchdog能够看见,进程名称大概是watchdog/X(数字:cpu逻辑编号1/2/3/4之类的)。这个进程或者线程每一秒钟运行一次,否则会睡眠和待机。这个进程运行会收集每一个cpu运行时使用数据的时间并且存放到属于每个cpu自己的内核数据结构。在内核中有很多特定的中断函数。这些中断函数会调用soft lockup计数,他会使用当前的时间戳与特定(对应的)cpu的内核数据结构中保存的时间对比,如果发现当前的时间戳比对应cpu保存的时间大于设定的阀值,他就假设监测进程或看门狗线程在一个相当可观的时间还没有执。Cpu软锁为什么会产生,是怎么产生的?如果linux内核是经过精心设计安排的CPU调度访问,那么怎么会产生cpu软死锁?那么只能说由于用户开发的或者第三方软件引入,看我们服务器内核panic的原因就是qmgr进程引起。因为每一个无限的循环都会一直有一个cpu的执行流程(qmgr进程示一个后台邮件的消息队列服务进程),并且拥有一定的优先级。Cpu调度器调度一个驱动程序来运行,如果这个驱动程序有问题并且没有被检测到,那么这个驱动程序将会暂用cpu的很长时间。根据前面的描述,看门狗进程会抓住(catch)这一点并且抛出一个软死锁(soft lockup)错误。软死锁会挂起cpu使你的系统不可用。 3.具体分析1.系统如下时间2个时间进行了重启:Mar 3 21:53:16 ser-node7 kernel: Linux version 3.10.0-957.el7.x86_64 ([email protected])Mar 3 22:37:19 ser-node7 kernel: Linux version 3.10.0-957.el7.x86_64 ([email protected])

在重启前的一段时间均已经出现了cpu软锁的现象,而深入分析cpu软锁,我们依赖于kdump产生的vmcore数据.

Mar 3 14:28:18 ser-node7 kernel: NMI watchdog: BUG: soft lockup - CPU#5 stuck for 22s! [runc[1:CHILD]:52902]Mar 2 18:14:59 ser-node7 kernel: NMI watchdog: BUG: soft lockup - CPU#3 stuck for 23s! [runc:[1:CHILD]:55961]

./systemctl_list-unit-files:kdump.service enabled 如果您之前已经做过,那么请您额外修改/etc/sysctl.conf加入以下行: kernel.softlockup_panic = 1 然后执行"sysctl -p"使参数生效。这样当系统出现cpu软锁现象时,会自动触发kernel panic,此时如果kdump可以正常工作,会生成vmcore.并自动重新启动系统

2.另外在日志中我们还注意了存在如下的告警,其和上面的soft lockup问题无直接关系.

​​# cat messages | grep "SLUB: Unable to allocate memory on node"​​

Mar 2 18:04:45 ser-node7 kernel: SLUB: Unable to allocate memory on node -1 (gfp=0xd0)Mar 3 14:54:25 ser-node7 kernel: SLUB: Unable to allocate memory on node -1 (gfp=0xd0)Mar 3 14:54:25 ser-node7 kernel: SLUB: Unable to allocate memory on node -1 (gfp=0xd0)

此为系统的已知BUG,具体请参考如下KB:

SLUB: Unable to allocate memory on node -1 (gfp=0x20)​​https://access.redhat.com/solutions/4088471​​ 依据此KB,请将kernel升级到kernel-3.10.0-1062.4.1.el7或者更新.kernel-3.10.0-1062.4.1.el7下载地址为:​​https://access.redhat.com/errata/RHSA-2019:3055​​ 如何升级内核,请查看下面文档: How to update/upgrade the Red Hat Enterprise Linux kernel?​​https://access.redhat.com/solutions/20366​​ 4.解决方案

百度大手子给的方案如下所示:

​​vi /etc/sysctl.conf ​​kernel.watchdog_thresh =30查看:​​# tail -1 /proc/sys/kernel/watchdog_thresh​​ 临时生效:​​# sysctl -w kernel.watchdog_thresh=30​​ 原厂建议尚在等待中

打赏 收藏 评论 分享 举报

上一篇:linux系统修改不成功无法修改密码

下一篇:H3C服务器红灯故障解决方案



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3